package io.sage.ch06.methodrefactoring;

import java.util.Arrays;
import java.util.List;

/**
 * 6.9 Substitute Algorithm 替换算法
 * 问题场景：想把某个算法替换为另一个更清晰的算法
 * 重构思路：将函数本体替换为另一个算法。
 * 做法：
 * 1）准备好另一个（替换用）算法，让它通过编译。
 * 2）针对现有测试，执行上述的新算法。如果结果与原本结果相同， 重构结束。
 * 3）如果测试结果不同于原先，在测试和调试过程中，以旧算法为比较参照标准。
 */
public class SubstituteAlgorithm {

    /**
     * 重构前
     */
    String foundPerson(String[] people) {
        for (int i = 0; i < people.length; i++) {
            if (people[i].equals("Don")) {
                return "Don";
            }
            if (people[i].equals("John")) {
                return "John";
            }
            if (people[i].equals("Kent")) {
                return "Kent";
            }
        }
        return "";
    }

    /**
     * 重构后
     */
    String foundPerson_new(String[] people) {
        List candidates = Arrays.asList(new String[]{"Don", "John", "Kent"});
        for (int i = 0; i < people.length; i++) {
            if (candidates.contains(people[i])) {
                return people[i];
            }
        }
        return "";
    }
}
